AWSの長いIDを適用するための新旧APIについて
こんにちは、虎塚です。
次の記事のとおり、EC2インスタンスやEBSボリュームなどの長いIDを、IAM User、IAM Roleなどの単位で適用するためのAPIが新しく公開されました。
この記事は、上の記事の補足として、関連APIを使用する際の注意点をお伝えします。
長いIDの適用に関するAPI
長いIDの適用に関するAPIは、新旧2種類あります。AWS APIとAWS CLIのコマンドを次の表に示します。
新旧 | AWS API | AWS CLI command |
---|---|---|
旧 | DescribeIdFormat | describe-id-format |
旧 | ModifyIdFormat | modify-id-format |
新 | DescribeIdentityIdFormat | describe-identity-id-format |
新 | ModifyIdentityIdFormat | modify-identity-id-format |
下の2つが、今回のアップデートで追加されたAPIです。これらのAPIを使用する上での注意は、次のとおりです。
- なるべく新しいDescribeIdentityIdFormatとModifyIdentityIdFormatを使いましょう
- 以前からあるDescribeIdFormatとModifyIdFormatは、必要に応じて、IAM Policyで使用制限をかけましょう
それぞれについて説明します。
新しいAPIを使う理由
新しいAPIでは、長いIDを適用する対象のIAM User、IAM Roleを、明示的に指定するようになりました。以前からあるAPIでは、「長いIDを適用する」という効果が、APIの使用者に対して適用されていました。
後者は少しわかりづらいのではないかと思います。
また、以前からあるAPI (DescribeIdFormat, ModifyIdFormat) の挙動は、よくある質問 - Amazon EC2にあるとおり、バージョンによって異なります。
注: Amazon EC2 API の 2015-10-01 のバージョンで、IAM ロールの認証情報を使用して describe-id-format または modify-id-format を呼び出す場合、結果は AWS アカウント全体に適用され、特定の IAM ロールには適用されません。現行バージョンの Amazon EC2 API では、結果は正常に IAM ロールにのみ適用されます。
AWS CLIのバージョン
現時点の最新バージョンのAWS CLIを使用すれば問題ありません。次のバージョン以降なら大丈夫でしょう。
- aws-cli/1.10.47 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.37
注意
AWS Management Consoleから現在デフォルトで起動できるAmazon Linux (Amazon Linux AMI 2016.03.3 (HVM)) には、次のバージョンのAWS CLIがインストールされています。
- aws-cli/1.10.33 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.23
このバージョンのAWS CLIには、まだ新しいAPIを使用したコマンド (describe-identity-id-format, modify-identity-id-format) が入っていません。また、以前からあるコマンド (describe-id-format、modify-id-format) が、アカウント内全体に影響を及ぼす旧来の挙動をします。
長いIDを適用する時は、まずAWS CLIをアップデートしてからにしましょう。
新APIと以前からあるAPIの振る舞いの違い
長いIDを適用するための4つのAPIを、AWS CLI経由で実行して、違いを確認しました。確認方法は、次のとおりです。
- AWS CLIのバージョン
- aws-cli/1.10.47 Python/2.7.10 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.4.37
- AWS CLIを実行する主体
- 単一のAWSアカウント内に、IAM User 2つ (A, B) と、IAM Role 2つ (A, B) を用意
- AWS CLIの実行方法
- ローカルマシンのターミナルから、IAM User (A)、IAM User (B) それぞれの鍵を使用して、AWS CLIを実行
- IAM Role (A) と IAM Role (B) をそれぞれ関連付けたEC2インスタンスを2台起動し、内部からAWS CLIを実行
操作ユーザでmodify系のコマンドを実行した後に、describe系のコマンドを実行し、変更が反映されたかどうかをまとめました。反映されているものは◯、反映されないものは×、調査省略は-です。
describe-id-format | describe-identity-id-format | ||||||||
---|---|---|---|---|---|---|---|---|---|
- | 操作ユーザ | IAM User (A) | IAM User (B) | IAM Role (A) | IAM Role (B) | IAM User (A) | IAM User (B) | IAM Role (A) | IAM Role (B) |
modify-id-format | IAM User (A) | ◯ | × | × | - | ◯ | × | × | - |
IAM Role (A) | × | - | ◯ | ◯ or × (※) | × | - | ◯ | × | |
modify-identity-id-format | IAM User (A) | ◯ | × | × | - | ◯ | × | × | - |
IAM Role (A) | × | - | ◯ | × | × | - | ◯ | × |
「※」が、APIのバージョンによって挙動が異なる部分です。IAM Role (A)が、最新のAWS CLIで「modify-id-format」変更を実行した時には、IAM Role (B)には影響を与えません。古いバージョンのAWS CLIで「modify-id-format」実行すると、アカウント内のIAM Roleすべてに影響を及ぼします(IAM Userには影響しません)。
以前からあるAPIの使用を制限する
上記のように、ModifyIdFormatとDescribeIdFormatを古いAWS CLI経由で実行してしまうと、意図せず広い範囲に影響を及ぼしてしまいます。
一般的に、権限管理の操作を制限するためにIAM APIの利用を制限している環境が多いかと思いますが、ModifyIdFormatとDescribeIdFormatはEC2 APIのため、ノーガードの場合があるかもしれません。
安全のために、次のIAM PolicyをIAM UserまたはIAM Roleに追加するのがおすすめです。特に、ひとつのAWSアカウントで複数のシステムを動かしていて、利用者がたくさんいる場合は、気をつけてください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:ModifyIdFormat", "ec2:DescribeIdFormat" ], "Resource": "*" } ] }
IAM UserやIAM RoleなどのARNを指定せずに長いIDの適用可否を変更することは、これでできなくなります。
おわりに
今回追加されたAPIだけを最初から出してほしかった気がしますが、ユーザのフィードバックを受けて実装されたのかもしれませんね。これから使うぶんには、新しいAPIを選びましょう。
それでは、また。